/*
编写一个程序，检查是否可以通过由它的一个子串重复多次构成。
*/

#include <stdio.h>
#include <string.h>

#define BUFFER_SIZE 100
int isRepeatedSubstring(char *str)
{
    int len = strlen(str);

    for (int idx = 1; idx < len / 2; idx++)
    {
        if (len % idx == 0)
        {
            int isRepeated = 1;
            char sub_str[BUFFER_SIZE];

            /* 获取子串 */
            strncmp(sub_str, str, idx);

            /* 检查整个字符串是否由重复子串构成 */
            for (int jdx = idx; jdx < len; jdx += idx)
            {
                if (strncmp(sub_str, str + jdx, idx) != 0) 
                {
                    isRepeated = 0;
                    break;
                }
            }
            if (isRepeated) 
            {
                return 1;
            }
        }
    }
}

int main() 
{
    char s[100];
    printf("请输入一个字符串：");
    scanf("%s", s);
    
    if (isRepeatedSubstring(s)) 
    {
        printf("可以通过重复子串构成\n");
    } else {
        printf("不能通过重复子串构成\n");
    }
    
    return 0;
}